%!TEX root = tesis-header.tex

\section{Motor de Render Gráfico}

\subsection{OGRE}

OGRE (Motor de Render Gráfico Orientado a Objetos)\footnote{Por sus siglas en inglés \textit{Object-Oriented Graphics Rendering Engine}} es un motor de 3D flexible, orientado a escenas, escrito en C++. Su propósito es el de facilitar a los desarrolladores la producción de aplicaciones utilizando gráficos acelerados por Hardware. Esto lo logra por medio de una librería de clases que abstrae todos los detalles del uso de las librerías del sistema como Direct3D y OpenGL que proporciona una interfaz basada en objetos del ambiente y otras clases intuitivas.

OGRE no es un motor de juegos, aunque frecuentemente se le ha hecho referencia como tal, pero está diseñado deliberadamente para proporcionar una solución de gráficos solamente; para otras características como: sonido, redes, inteligencia artificial, colisiones, física, etc, se deben integrar con librerías externas. 

\subsubsection{Manejador de Escenas}

Todo lo que aparece en la pantalla es controlado por un Manejador de Escenas (SceneManager). La clase del SceneManager se encarga de rastrear y mantener localizado cada uno de los objetos de esa escena. Cada vez que se crea una cámara, el Manejador de Escenas está al tanto de su posición en el espacio así como de entidades como planos, billboards, luces, etc.

Existe una variedad de Manejadores de Escenas para diversos propósitos, como la manipulación de terrenos, mapas BSP\footnote{Binary Space partition - formato original de las escenas en el videojuego \textit{Quake}}, entre otros.

\subsubsection{Entidades}

Una entidad para OGRE es uno de los tipos de objeto que se pueden dibujar en la escena. Se puede pensar en una entidad como cualquier objeto que puede ser representado por una malla 3D. Un robot, un pez son entidades; un terreno es una gran entidad; pero las luces, billboards, partículas y cámaras no lo son.

OGRE separa los objetos de su posición y orientación, lo cual quiere decir, que no se puede colocar una entidad directamente en la escena. Las entidades se deben asociar a un nodo de escena (objeto tipo SceneNode), el cual contiene la información relativa a su posición y orientación.

\subsubsection{Nodos de Escena (SceneNodes)}

Como se había mencionado anteriormente, un nodo de escena almacena la posición y orientación de todas las entidades que se asocian a él. Cuando se crea una entidad, no se dibuja en la pantalla hasta que se asocie a un nodo de escena. De la misma manera, un nodo de escena no es un objeto que se despliega en la pantalla. Solo cuando se crea un nodo de escena y le asocia una entidad (u otro objeto) puede llegarse a dibujar en la pantalla.

Los nodos de escena pueden tener cualquier cantidad de objetos asociados a ellos. Suponiendo un ejemplo en donde se quiere dibujar un personaje caminando por la calle con una luz iluminándolo, se procedería a crear primero un nodo de escena, luego la entidad del personaje y asociarla a este nodo y posteriormente se crea un objeto \emph{Light} (de luz) y se asocia al mismo nodo. Los nodos de escena se pueden asociar a otros nodos de escena lo que permite crear toda una jerarquía entre nodos.

Otro concepto importante acerca de los nodos de escena es que su posición es siempre relativa a la de su nodo de escena padre y en cualquier manejador de escenas existe un nodo raíz al que todos están asociados. 

\section{Motor de Física}

\subsection{ODE - Open Dynamics Engine}

ODE es una librería de alto rendimiento, libre y de código abierto, para la simulación de física de cuerpos rígidos. Es un API maduro, estable y muy intuitivo, independiente de cualquier plataforma (dado que esta escrito en C/C++). Integra facilidades para fricción, colisión y uniones (`joints')\footnote{Articulación entre varios cuerpos rígidos}. Es útil para simular vehículos, objetos en una escena de realidad virtual y criaturas virtuales. Actualmente se utiliza en varios videojuegos, aplicaciones de modelado 3D y de simulación.

\subsection{OgreODE}

OgreODE es un ``wrapper''\footnote{Interfaz que sirve de intermediaria entre dos API's o librerías distintas, comúnmente se considera como un \emph{traductor} entre funciones de ambas librerías}, originalmente escrito por ``monster''\footnote{Autor contribuyente al proyecto de OGRE Addons - \url{http://www.ogre3d.org/developers/addons}}. La librería soporta las primitivas de ODE y agrega objetos prefabricadas para facilitar la implementación de vehículos y cuerpos muertos (ragdolls). 

Originalmente esta librería estaba disponible para plataformas Windows y linux solamente. Afortunadamente durante el desarrollo de este trabajo de tesis se logro portar al sistema operativo Mac OS X, bajo su sistema de Frameworks, con el propósito de usarla en el entorno de desarrollo de este sistema operativo.

\section{Motor de Inteligencia Artificial}
\subsection{Game::AI++}
Game::AI++ es una librería de control de decisiones basada en la ejecución de árboles de comportamiento y está escrita en C++. El sistema de control en la toma de decisiones en Game::AI++ esta desarrollado para que múltiples árboles conectados entre sí representen comportamientos en los que cada nodo es una tarea específica que realiza búsquedas en los nodos hijo, regresando los nodos de solución y terminación de la tarea.

\section{Modelador 3D}

\subsection{Blender}

Blender es una aplicación integrada que facilita la creación de contenido 2D y 3D. Es un software que nos brinda una gran cantidad de facultades para modelado, texturizado, iluminación, animación y postproducción. Al ser de plataforma abierta puede funcionar en una amplia gama de sistemas operativos y procesadores, brinda además interoperabilidad entre sus diferentes versiones y posibilidad de expansión a través de plugins, ocupando poco espacio en memoria.

Desarrollado inicialmente para profesionistas de medios audiovisiales y artistas, se usa actualmente para la creación de visualizaciones en 3D usadas, por ejemplo en televsión o en producciones cinematográfica, también incorpora un motor de 3D en tiempo real como auxiliar en la creación de contenido interactivo.

\subsection{Maya}

Maya es una solución integrada de modelado, animación, efectos especiales y render. Es posible crear código interpretado personalizado por su entorno de desarrollo integrado. Maya tiene varias opciones adicionales en forma de complementos (plugins) que le dan la capacidad de integrar modelos creados en esta herramienta a librerías como OGRE.

\section{Entorno de Desarrollo}
\subsection{Xcode}

Xcode es un entorno de desarrollo, desarrollado por Apple, para el sistema operativo Mac OS X. Disponible como un paquete opcional en el DVD de instalación de Mac OS X, también se encuentra la ultima versión disponible para miembros del ADC\footnote {Apple Developer Connection} e incluye todas las herramientas necesarias para crear, depurar y optimizar aplicaciones para Mac OS X. Cuenta con un IDE\footnote{Del término en inglés ``Integrated Development Environment'', entorno de desarrollo integrado} que incluye un editor de código fuente, un sistema de vinculación, un depurador y un compilador basado en GCC para las plataformas Intel y PowerPC.
